/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package DA;

import javax.swing.JOptionPane;
import BE.*;
import java.sql.*;
import java.util.*;

/**
 *
 * @author alejandro
 */
public class DAContacto {
    
    public ResultSet buscarContacto(BEContacto contacto, int tipoBusqueda)
    {
        DAConexion bd = new DAConexion();
        Connection con = null;
        ResultSet rs = null;
        Statement s = null;
        //String query = null;
        String query = "SELECT * FROM CONTACTO c, TIPOCONTACTO t, PERSONA p ,TIPODOCUMENTO d  WHERE  c.TIPOCONTACTO = t.IDTIPOCONTACTO and c.IDCONTACTO = p.IDPERSONA"+
                " and d.IDTIPODOCUMENTO=p.IDTIPODOCUMENTO ";
                        
        if(!"".equals(contacto.getNombEmpresa()))
                query+= " AND NOMBEMPRESA LIKE '%" +contacto.getNombEmpresa() + "%'";
        
        if(!"".equals(contacto.getNombre()))
               query+= " AND p.NOMBRE LIKE '%"+contacto.getNombre() + "%'";
                        
        
        if(!"".equals(contacto.getApePaterno()))
              query+=" AND p.APEPATERNO LIKE '%" +contacto.getApePaterno() + "%'";
        
             
        if(!"TODOS".equals(contacto.getEstado()))
              query+=" AND p.ESTADO LIKE '" +contacto.getEstado() + "%'";
        
                 
        if (contacto.getIdTipoContacto() > 0)
            query += " AND c.TIPOCONTACTO = " + contacto.getIdTipoContacto();
        if (contacto.getIdPersona() > 0)
            query += " AND c.IDCONTACTO = " + contacto.getIdPersona();
        if (contacto.getTipoDocumento() > 0)
            query += " AND p.IDTIPODOCUMENTO = " + contacto.getTipoDocumento();
        
              
        try
        {
            con = bd.conectar();
            s = con.createStatement();
            rs = s.executeQuery(query);

        } catch (Exception e) {
            JOptionPane.showMessageDialog(null,"Problema al consultar la base de datos","Error",JOptionPane.ERROR_MESSAGE);
            bd.cierraConexion(con);
            return null;
        }
        bd.cierraConexion(con);
        return rs;
    }
    
    public int eliminarContacto (int idContacto)
    {
        DAConexion bd = new DAConexion();
        Connection con = null;
        Statement s = null;
        String query = "UPDATE PERSONA SET ESTADO = 'INACTIVO' WHERE IDPERSONA = " + idContacto;
        try
        {
            con = bd.conectar();
            s = con.createStatement();
            s.executeUpdate(query);
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null,"Problemas al momento de borrar datos","Error",JOptionPane.ERROR_MESSAGE);
            bd.cierraConexion(con);
            return 1;
        }
        bd.cierraConexion(con);
        return 0;
    }
    
    //daContacto.agregarContacto(contacto);
    
    public int agregarContactoCargaMasiva(BEContacto contacto)
    {
        DAConexion bd = new DAConexion();
        Connection con = null;
        PreparedStatement s = null;
        String query = "INSERT INTO PERSONA (idpersona,NOMBRE,APEPATERNO," +
                "       APEMATERNO,IDTIPODOCUMENTO,NROTIPODOCUMENTO,TELEFONO,DIRECCION,FECHANACIMIENTO,EMAIL,ESTADO) VALUES ("+contacto.getIdPersona()+",'"+
                contacto.getNombre() + "','" + contacto.getApePaterno() + "','" +  contacto.getApeMaterno()  +"',"+
                contacto.getTipoDocumento() +","+contacto.getNroDocumento() + "," +contacto.getTelefono() +",'"+ contacto.getDireccion()+"','"+
                contacto.getFechaNacimiento() +"','"+ contacto.getEmail()+ "','ACTIVO')";
        
        String query2 = "INSERT INTO CONTACTO (IDCONTACTO,NOMBEMPRESA,TIPOCONTACTO)" +
                " VALUES ((SELECT MAX(IDPERSONA) FROM PERSONA),'"+ contacto.getNombEmpresa()+"',"+
                contacto.getIdTipoContacto() +")";

        try
        {
           con = bd.conectar();
            s = con.prepareStatement(query);
            s.executeUpdate();
            s = con.prepareStatement(query2);
            s.executeUpdate();
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null,"Problemas al momento de insertar datos",
                        "Error",JOptionPane.ERROR_MESSAGE);
            bd.cierraConexion(con);
            return 1;
        }

        bd.cierraConexion(con);
        return 0;
    }
    public int agregarContacto (BEContacto contacto)
    {
        DAConexion bd = new DAConexion();
        Connection con = null;
        PreparedStatement s = null;
        String query = "INSERT INTO PERSONA (NOMBRE,APEPATERNO," +
                "       APEMATERNO,IDTIPODOCUMENTO,NROTIPODOCUMENTO,TELEFONO,DIRECCION,FECHANACIMIENTO,EMAIL,ESTADO) VALUES ('"+
                contacto.getNombre() + "','" + contacto.getApePaterno() + "','" +  contacto.getApeMaterno()  +"',"+
                contacto.getTipoDocumento() +","+contacto.getNroDocumento() + "," +contacto.getTelefono() +",'"+ contacto.getDireccion()+"','"+
                contacto.getFechaNacimiento() +"','"+ contacto.getEmail()+ "','ACTIVO')";
        
        String query2 = "INSERT INTO CONTACTO (IDCONTACTO,NOMBEMPRESA,TIPOCONTACTO)" +
                " VALUES ((SELECT MAX(IDPERSONA) FROM PERSONA),'"+ contacto.getNombEmpresa()+"',"+
                contacto.getIdTipoContacto() +")";

        try
        {
           con = bd.conectar();
            s = con.prepareStatement(query);
            s.executeUpdate();
            s = con.prepareStatement(query2);
            s.executeUpdate();
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null,"Problemas al momento de insertar datos",
                        "Error",JOptionPane.ERROR_MESSAGE);
            bd.cierraConexion(con);
            return 1;
        }

        bd.cierraConexion(con);
        return 0;
    }
    
    
    public List<BETipoContacto> obtenerTipoContacto ()
    {
        DAConexion bd = new DAConexion();
        Connection con = null;
        Statement s = null;
        ResultSet rs = null;

        List<BETipoContacto> tipos = null;
        BETipoContacto tipo = null;
        String query = "SELECT * FROM TIPOCONTACTO";

        try
        {
            con = bd.conectar();
            s = con.createStatement();
            rs = s.executeQuery(query);

            tipos = new ArrayList<BETipoContacto>();
            while (rs.next())
            {
                tipo = new BETipoContacto();
                tipo.setIdTipoContacto(rs.getInt("IDTIPOCONTACTO"));
                tipo.setNombTipoContacto(rs.getString("NOMBTIPOCONTACTO"));

                tipos.add(tipo);
            }

        }
        catch (Exception e)
        {
//            JOptionPane.showMessageDialog(null,"Error al obtener Tipos de productos",
//                                          "Error",JOptionPane.ERROR_MESSAGE);
            bd.cierraConexion(con);
            return null;
        }
        
        bd.cierraConexion(con);
        return tipos;
    }

    public BEContacto getContactobyId (int idIProd)
    {
        DAConexion bd = new DAConexion();
        Connection con = null;
        Statement s = null;
        ResultSet rs = null;

        BEContacto contacto = null;
        String query = "SELECT * FROM CONTACTO c, PERSONA p, TIPOCONTACTO t WHERE p.IDPERSONA = " + idIProd +
                " AND t.IDTIPOCONTACTO=c.TIPOCONTACTO AND p.IDPERSONA=c.IDCONTACTO";

        try
        {
            con = bd.conectar();
            s = con.createStatement();
            rs = s.executeQuery(query);

            rs.next();
            contacto = new BEContacto();
            
            contacto.setIdPersona(rs.getInt("IDPERSONA"));
            contacto.setIdTipoContacto(rs.getInt("IDTIPOCONTACTO"));
            contacto.setNombre(rs.getString("NOMBRE"));
            contacto.setApePaterno(rs.getString("APEPATERNO"));
            contacto.setApeMaterno(rs.getString("APEMATERNO"));
            contacto.setDireccion(rs.getString("DIRECCION"));
            contacto.setTipoDocumento(rs.getInt("IDTIPODOCUMENTO"));
            contacto.setNroDocumento(rs.getInt("NROTIPODOCUMENTO"));
            contacto.setEmail(rs.getString("EMAIL"));
            contacto.setFechaNacimiento(rs.getDate("FECHANACIMIENTO"));
            contacto.setTelefono(rs.getInt("TELEFONO"));
            contacto.setNombEmpresa(rs.getString("NOMBEMPRESA"));
            contacto.setEstado(rs.getString("ESTADO"));
            contacto.setTipoDocumento(rs.getInt("IDTIPODOCUMENTO"));
            
            
        }
        catch (Exception e)
        {
          JOptionPane.showMessageDialog(null,"Error al obtener los datos del contacto",
                                          "Error",JOptionPane.ERROR_MESSAGE);
            bd.cierraConexion(con);
            return null;
        }

        bd.cierraConexion(con);
        return contacto;
    }
    
    public int modificaContacto (BEContacto contacto)
    {
        DAConexion bd = new DAConexion();
        Connection con = null;
        Statement s = null;
        String query = "UPDATE CONTACTO SET NOMBEMPRESA = '" + contacto.getNombEmpresa() +
                "', TIPOCONTACTO = " + contacto.getIdTipoContacto() + " WHERE " +
                "IDCONTACTO = " + contacto.getIdPersona();
        
        String query2 = "UPDATE PERSONA SET NOMBRE = '" + contacto.getNombre() +
                "', APEPATERNO = '" + contacto.getApePaterno() + "', APEMATERNO = '" +
                contacto.getApeMaterno()+"', IDTIPODOCUMENTO="+contacto.getTipoDocumento()+",NROTIPODOCUMENTO = " + contacto.getNroDocumento()+", TELEFONO ="+
                contacto.getTelefono()+", DIRECCION='"+contacto.getDireccion()+"', EMAIL='"+
                contacto.getEmail()+"', FECHANACIMIENTO='"+contacto.getFechaNacimiento()+"' WHERE "+
                "IDPERSONA = " +contacto.getIdPersona();

        try
        {
            con = bd.conectar();
            s = con.createStatement();
            s.executeUpdate(query);
              
            
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null,"Problemas al momento de actualizar datos","Error",JOptionPane.ERROR_MESSAGE);
            bd.cierraConexion(con);
            return 1;
        }
        
        try
        {
            con = bd.conectar();
            s = con.createStatement();
            s.executeUpdate(query2);
          
            
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null,"Problemas al momento de actualizar datos","Error",JOptionPane.ERROR_MESSAGE);
            bd.cierraConexion(con);
            return 1;
        }
        bd.cierraConexion(con);
        
        return 0;       
     }
}
